/**
 * 中信银行借记卡登录业务处理
 */

/**
 * 基本信息录入处理
 * @returns {boolean}
 */
function inputBaseCitic()  {
    var checkInputFunc = function () {
        var username = getLoginParams(context)[0];
        var password = context.get(LUA_TASK_TOKEN);
        logger.info("原始密码长度"+password.length);
        if(password.length>20){
            password = password.substring(0, 20) ;
            logger.info("处理密码长度"+password.length);
        }

        var startTime = System.currentTimeMillis();
        //输入用户名密码
        var path = luaFuncs.inputnameAndpassword(username, password);
        var endTime = System.currentTimeMillis() - startTime;
        logger.info("任务" + context.get(Constants.TASK_KEY) + "窗口时间：" + endTime);
        logger.info("登录返回值"+path);
        var params = path.split("|") ;
        if(params.length == 2){
            var inputLength = params[1].length ;
            var passwordLength = password.length ;
            if (inputLength !== passwordLength){
                logger.error("密码输入异常，输入的长度不等于真正的长度");
                return false;
            }
        }

        context.put(TASK_IMG_PATH, params[0]) ;
        var message = luaFuncs.clickLogin() ;
        logger.info("中信银行登录提示"+message);
        if(message!==null && message.contains("请输入4位验证码")){
            context.put("imgflag", "true") ;
        }
        return true;
    }
    var getErrorMsg = function () {
        return "密码因控件输入错误";
    }
    return assertTrueOrThrowException("", checkInputFunc, getErrorMsg);
}

/**
 * 图片验证码处理
 * @returns {boolean}
 */
function inputImgCitic()  {
    var loginResult= {}
    var checkImgResult = function (loginResult) {
        var imgflag = context.get("imgflag") ;
        if(StringUtils.equals("true", imgflag)){

            logger.info(" 人工打码开始");

            context.put(TASK_IMG_REGEX,"[0-9a-zA-Z]{4}");
            var code = waitImgCodeBySecondsByJs(context,120,true,3);

            if (StringUtils.isBlank(code) || code.length < 4) {
                logger.info("打码位数不足四位，手动补足 {}", code);
                code = "1234";
            }
            logger.info(code);
            logger.info("输入验证码开始");
            luaFuncs.setCode(code);// 输入验证码
            Thread.sleep(500);
            logger.info("点击登录按钮开始");
            var message = luaFuncs.clickLogin() ;
            if(message!==null && message.contains("验证码错误")){
                return false ;
            }
        }

        var html = luaFuncs.getHtmlGb() ;
        Thread.sleep(2000);
        storeDataToFile(context,html, "login_2.txt");

        for(var i=3 ; i<=5 ;i++){
            if(html.contains("正在查询用户名")){
                Thread.sleep(5000);
                html = luaFuncs.getHtmlGb() ;
                storeDataToFile(context,html, "login_"+i+".txt");
            }else{
                break ;
            }
            if(i == 5){//响应3次没响应网站繁忙
                loginResult.errorMsg = "系统繁忙，请稍候再试(登录前)";
                return false
            }
        }
        //首页放入上下文
        context.put(keys.INDEX_PAGE,html);

        var flag = getMainHtml(html) ;
        if(!flag){
            var doc = Jsoup.parse(html) ;
            var title = doc.select("title").text() ;
            if(StringUtils.equals("网银引导流程", title))
            {
                loginResult.errorMsg = "请登录官网设置网银引导流程";
                return false;
            }
            if(doc.select("[class=errorReason]") == null || doc.select("[class=errorReason]").size() == 0)
            {
                loginResult.errorMsg = "网站繁忙，请稍后再试";
                return false;
            }
            var error = doc.select("[class=errorReason]").first().text() ;
            logger.info("中信银行taskKey = {} 登录失败",context.get(LUA_TASK_KEY));
            loginResult.errorMsg = error;
            return false
        }
        return true;
    }
    var getErrorMsg = function (loginResult) {
        return loginResult.errorMsg;
    }
    return assertTrueOrThrowException(loginResult, checkImgResult, getErrorMsg);




}

/**
 * 短信处理
 * @returns {boolean}
 */
function inputSmsCitic(){
    var isCorrectFunc = function () {
        return true
    };
    var getErrorMsgFunc = function () {
        return ""
    };
    return assertTrueOrThrowException("", isCorrectFunc, getErrorMsgFunc)
}

/**
 * 登录后的页面判断是否登录成功
 * @param html
 */
function getMainHtml(html){
    //首页内容的解析调整到抓取方法中
    // getLoginEMP_SID(html) ;
    // var doc = Jsoup.parse(html) ;
    // var name = doc.select("[class=userName]").text() ;
    // context.put("name", name) ;
    if(!html.contains("尊敬的")){
        return false ;
    }
    return true ;
}

var luaFuncs = {
    getCookie: function () {
        var map = new HashMap();
        map.put("method", "getCookie");
        return sendAndReceive(map)
    },
    inputnameAndpassword:function(userName, password){
        var map = new HashMap();
        map.put("method", "inputnameAndpassword");
        map.put("username", userName);
        map.put("password", password);
        return sendAndReceive(map);
    },
    getHtmlGb:function(){
        var map = new HashMap();
        map.put("method", "getHtmlGb");
        return sendAndReceive(map);
    },
    clickLogin: function(){
        var map = new HashMap();
        map.put("method", "clickLogin");
        return sendAndReceive(map);
    },
    setCode:function(code){
        var map = new HashMap();
        map.put("method", "setCode");
        map.put("code", code);
        return sendAndReceive(map);
    }
}